package sword.T44;

/**
 * @Author: 18362
 * @Create: 2022-04-09 11:27:16 星期六
 */
class Solution {
    public int findNthDigit(int n) {
        if (n <= 9)
            return n;
        int lastCell = 0;
        // cell有可能溢出int，所以用long保存
        long cell = 9;      // 表示1~N的所有数的数字位数和，N是di位的最大值，比如di=2,则N=99，cell表示1~99的所有数字位数和
        int num = 9;       // 表示di位数有多少个数字，比如di=2,num表示10~99一共有90个数，di=3，num表示100~999的数字个数
        int di = 1;         // 表示当前位数
        while (n > cell) {      // 找到上限
            num *= 10;      // 1~9为9，10~99为90，每次乘以10
            di++;
            lastCell = (int) cell;
            cell += (long)num * di;   // 每次加上num*di，比如di从2到3，会多出100~999一共num(900)个数，那么cell就多出900*3
        }
        int m = n - lastCell - 1;
        num/=9;
        return getNthDigit(num+m/di, m%di);
    }

    /**
     * 返回num中第digit位的数字，比如getNthDigit(198,2)=8，getNthDigit(198,1)=9
     */
    private int getNthDigit(int num, int digit) {
        String s = String.valueOf(num);
        return s.charAt(digit) - '0';
    }
}